package cn.edu.lingnan.controller;

import cn.edu.lingnan.bean.Dog;
import cn.edu.lingnan.bean.Person;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.print.attribute.standard.JobOriginatingUserName;

//@RestController
@Controller
@RequestMapping("/book")
public class WebControllerTest {

    /**
     * @RequestMapping
     * 1、value：定义request请求的映射地址
     * 2、method:定义请求的方式(get，post，options，put，path，delete，trace)
     *3、params:定义request请求中必须包含的参数值
     */

    /**
     * @RestController =@Controller + @ResponseBody
     * 在一个controller中如果使用restcontroller注解，则controller中的方法无法返回jsp页面
     * (无法返回return中的内容)
     * 如果需要返回指定的页面，则需要使用@Controller
     * 如果需要返回JSON、xml内容到页面，则需要在对应方法基础上加上@ResponseBody
     * @ResponseBody注解作用，将controller方法执行的结果转化为JSON格式的数据
     */

    /**
     * @RequestParam: 用于获取传入的参数值
     *  1、value: 参数的名称
     *  2、required：定义该传入参数是否必须，默认为true
     *
     */
    @RequestMapping(value = "/hello",params = "username")
    public String hello(@RequestParam(value = "username",required = true) String name){

        return "SpringBoot整合SpringMVC操作" + name;
    }

    /**
     * Controller层中的方法处理完后要返回视图，SpringMVC支持如下的返回方式：
     * 1、ModelAndView（）
     * 2、model()
     * 3、String
     * 4、void
     * 5、Map
     * 6、ModeLMap
     * 7、View
     */
    @RequestMapping(value = "/showModelAndView",method = RequestMethod.GET)
    public ModelAndView showTest1(){
        //构造ModelAndView对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","value1");
        //跳转到指定的视图
        mv.setViewName("showTest");
        return mv;
    }

    @Resource
    Dog dog;
    @Resource
    Person person;

    @RequestMapping("/showModel")
    public String showModel(Model model){
        model.addAttribute("result","返回html页面操作");

        model.addAttribute("dog1", dog);
        model.addAttribute("person1",person);

        return "showModelTest";
    }
}
